const AlipaySdk = require("alipay-sdk").default;
// const AlipayFormData = require("alipay-sdk/lib/form").default;
module.exports = class AliPayUtil extends AlipaySdk {
  constructor(config, context) {
    super(config);
    this.ctx = context;
    this.cfg = context.config.alipay;
    this.AMOUNT_RATIO = 100;
  }

  order(data, outTradeNo, extendParams) {
    return this.pageExec("alipay.trade.app.pay", {
      // 调用setMethod并传入 get，会返回可以跳转到支付页面的 url
      method: "get",
      bizContent: {
        OutTradeNo: outTradeNo,
        ProductCode: "QUICK_MSECURITY_PAY",
        Subject: data.subject,
        // 订单金额，精确到小数点后两位
        TotalAmount: data.amount / this.AMOUNT_RATIO,
        Body: data.desc,
        PassbackParams: extendParams,
        //extendParams:{
        // 系统商编号，填写服务商的PID用于获取返佣，返佣参数传值前提：传值账号需要签约返佣协议，用于isv商户。
        // SysServiceProviderId: '2088****000',
        // 花呗参数传值前提：必须有该接口花呗收款准入条件，且需签约花呗分期
        // 指定可选期数，只支持3/6/12期，还款期数越长手续费越高
        // HbFqNum: '3',
        // 指定手续费承担方式，手续费可以由用户全承担（该值为0），也可以商户全承担（该值为100），但不可以共同承担，即不可取0和100外的其他值。
        // HbFqSellerPercent: '0',
        //},
      },
      // 异步通知地址，商户外网可以post访问的异步地址，用于接收支付宝返回的支付结果，
      // 如果未收到该通知可参考该文档进行确认：https://opensupport.alipay.com/support/helpcenter/193/201602475759
      notifyUrl: this.cfg.notifyUrl,
    }).replace("https://openapi.alipay.com/gateway.do?", "");
    // 返回的url去除支付宝网关获取到orderString，可以直接给客户端请求。
    // 如果传值客户端失败，可根据返回错误信息到该文档寻找排查方案：https://opensupport.alipay.com/support/helpcenter/89
    // 这里必须去掉支付宝网关地址https://openapi.alipay.com/gateway.do?，否则会报商家订单参数异常，请重新发起付款。

    // 老方式
    const formData = new AlipayFormData();
    // // 调用setMethod并传入 get，会返回可以跳转到支付页面的 url
    // formData.setMethod("get");
    // formData.addField("bizContent", {
    //   OutTradeNo: outTradeNo,
    //   ProductCode: "QUICK_MSECURITY_PAY",
    //   Subject: data.subject,
    //   // 订单金额，精确到小数点后两位
    //   TotalAmount: data.amount / this.AMOUNT_RATIO,
    //   Body: data.desc,
    //   extendParams: extendParams,
    //   //extendParams:{
    //   // 系统商编号，填写服务商的PID用于获取返佣，返佣参数传值前提：传值账号需要签约返佣协议，用于isv商户。
    //   // SysServiceProviderId: '2088****000',
    //   // 花呗参数传值前提：必须有该接口花呗收款准入条件，且需签约花呗分期
    //   // 指定可选期数，只支持3/6/12期，还款期数越长手续费越高
    //   // HbFqNum: '3',
    //   // 指定手续费承担方式，手续费可以由用户全承担（该值为0），也可以商户全承担（该值为100），但不可以共同承担，即不可取0和100外的其他值。
    //   // HbFqSellerPercent: '0',
    //   //},
    // });
    // // 异步通知地址，商户外网可以post访问的异步地址，用于接收支付宝返回的支付结果，
    // // 如果未收到该通知可参考该文档进行确认：https://opensupport.alipay.com/support/helpcenter/193/201602475759
    // formData.addField("notifyUrl", this.cfg.notifyUrl);
    // // 第三方调用（服务商模式），传值app_auth_token后，会收款至授权token对应商家账号，
    // // 如何获传值app_auth_token请参考文档：https://opensupport.alipay.com/support/helpcenter/79/201602494631
    // // formData.addField('appAuthToken', '');
    // return this.exec("alipay.trade.app.pay", null, { formData })
    //   .then((result) => {
    //     // 返回的url去除支付宝网关获取到orderString，可以直接给客户端请求。
    //     // 如果传值客户端失败，可根据返回错误信息到该文档寻找排查方案：https://opensupport.alipay.com/support/helpcenter/89
    //     // 这里必须去掉支付宝网关地址https://openapi.alipay.com/gateway.do?，否则会报商家订单参数异常，请重新发起付款。
    //     return result.replace("https://openapi.alipay.com/gateway.do?", "");
    //   })
    //   .catch((error) => {
    //     console.error("_alipay===>", error);
    //   });
  }

};
